#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
//int ret = fork();
//if(ret < 0){
//    perror("fork");
//    return 1;
//}
//    else if(ret == 0){ //child
//    printf("I am child : %d!, ret: %d\n", getpid(), ret);
//}   else{ //father
//    printf("I am father : %d!, ret: %d\n", getpid(), ret);
//}
//   sleep(1);


    //kill -l
    //查看kill指令，可以杀死进程，暂停进程等
    //static const char *const task_state_array[] = {
    //"R (running)", /*0 */ 运行状态，当使用printf时，进程处于s状态，
    //"S (sleeping)", /*1 */  浅睡眠 ，操作系统可以杀死进程
    //"D (disk sleep)", /*2 */深度睡眠，不可杀
    //"T (stopped)", /*4 */ 停止状态，可使用kill -19停止 -18继续
    //"t (tracing stop)", /*8 */跟踪状态，当在程序中打断点，处于t状态
    //"X (dead)", /*16 */ //死亡状态
    //"Z (zombie)", /*32 */ //僵尸进程，当子进程退出程序，父进程没有接收到子进程退出信息
    //};
    pid_t id = fork();//创建子进程
    if(id < 0){
    perror("fork");
    return 1;
    }
    else if(id > 0){ //parent
    printf("parent[%d] is sleeping...\n", getpid());
    sleep(30);
    }else{//child
    printf("child[%d] is begin Z...\n", getpid());
    sleep(5);
    exit(1);
    }//当子进程结束，未返回子进程结束信息，父进程还在运行，会导致僵尸进程的，资源的浪费
    return 0;
}
